1 DIM NT(8,8) 10 : 20 PRINT"[147][144]":POKE53280,6:POKE53281,5 30 FOR CL=54272TO54296:POKE CL,0:NEXT CL:REM CLEAR SONIC ADRESSES 40 PRINT " THE JIG IS UP" 50 PRINT" BY 60 [153]" PAUL G. MULVANEY, III 70 PRINT" " 80 PRINT" TYPE PREFERENCE:" 90 PRINT" JIGS(J) OR REELS(R)" 92 PRINT:PRINT" PRESS 'Q' AT ANY TIME TO QUIT" 95 AG$="PLEASE WAIT WHILE I COMPOSE YOUR " 100 GET I$: IF I$="J"GOTO140 110 IFI$="R"GOTO130 115 IFI$="Q"THEN60000 120 GOTO100 130 S=8:T$="REEL.": GOTO150 140 S=6:T$="JIG." 150 PRINT"[147]"; 151 Z=Z+1:PRINT" [192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192]":PRINT" "AG$T$ 152 PRINT" [192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192]" 160 FOR B=1TO8 165 PRINT""SPC(19)8-B 170 FOR N=1TOS 175 IFPEEK(198)<>0THENGETA$:IFA$="Q"THEN20 180 REM******************************** 190 KL=0:REM PREVENTS ENDLESS LOOP 200 KL=KL+1:IFKL=25THEN160 210 NT(B,N)=INT(RND(0)*15+1):IFB*N<8*STHENGOTO290:REM NOTE GENERATOR & LAST NOTE 220 REM******************************** 230 REM LINES24-26 PUT LAST NOTE IN TONIC CHORD 240 IFNT(8,S)=NT(4,S)ORABS(NT(8,S)-NT(4,S))=2ORABS(NT(8,S)-NT(4,S))=4THEN320 250 IFABS(NT(8,S)-NT(4,S))=7THEN320 260 GOTO200 270 REM********************************* 280 REM LINE 29 REPEATS OPENING THEME 290 NT(5,N)=NT(1,N):NT(6,N)=NT(2,N) 300 REM******************************** 310 REM LINES 32-34 DISALLOW HUGE INTERVALS OTHER THAN OCTAVES 320 IFABS(NT(B,N)-NT(B,N-1))=7THEN500 330 KL=KL+1:IFKL=25THEN160:REM ANTILOCK 340 IFABS(NT(B,N)-NT(B,N-1))>4GOTO200 350 REM********************************* 360 REM LINES 37-43 CREATE CHORDS 20% OF THE TIME 370 IFN=SGOTO500 380 IFNT(B,N)=1GOTO1020 390 IFNT(B,N)=15GOTO1070 400 NQ=INT(RND(0)*30+1):ONNQGOTO500,500,500,500,500,500,500,500,500 410 ONNQ-9GOTO880,900,920,940,960,980 420 ONNQ-15GOTO500,500,500,500,500,500,500,500 430 ONNQ-23GOTO500,500,500,500,500,500,500 440 REM********************************* 450 REM LINES46-49 KEEP CHORD PROGRESSIONS IN RANGE OF TINWHISTLE (&ARRAY!) 460 IF NT(B,N)>15THENNT(B,N)=NT(B,N)-7 470 IFNT(B,N)<1THENNT(B,N)=NT(B,N)+7 480 IF NT(B,N+1)<1THENNT(B,N+1)=NT(B,N+1)+7 490 IF NT(B,N+1)>15THENNT(B,N+1)=NT(B,N+1)-7 500 NEXT N 510 NEXTB 515 PRINT"[147]";:MM=0 520 REM******************************** 530 REM LINES 54-67 PLAY TUNE 2X 540 FORTW=1TO2 550 FORB=1TO8 560 FORN=1TOS 570 ONNT(B,N)GOTO710,720,730,740,750 580 ONNT(B,N)-5GOTO760,770,780,790,800 590 ONNT(B,N)-10GOTO810,820,830,840,850 600 POKE54296,15:POKE54277,136:POKE54278,136:POKE54276,17 610 IF(MM=.)AND(S=6)THENPRINT, 615 POKE54273,H:POKE54272,L:PRINTN$,:MM=MM+1:IFMM=3THENMM=0 620 IF N/S=INT(N/S)THENPRINT"--------------------------------------":GOTO640 630 IF2*N/S=INT(2*N/S)THENPRINT"......................................." 640 FORQT=1TO15:NEXTQT:POKE54276,16 645 IFPEEK(198)<>0THENGETA$:IFA$="Q"THEN20 650 NEXTN 660 NEXTB 670 NEXTTW 680 GOSUB1140 690 GOTO150 700 REM NOTE ASSIGNMENTS*************** 710 N$="D":H=9:L=104:GOTO600 720 N$="E":H=10:L=143:GOTO600 730 N$="F#":H=11:L=218:GOTO600 740 N$="G":H=12:L=143:GOTO600 750 N$="A":H=14:L=24:GOTO600 760 N$="B":H=15:L=210:GOTO600 770 N$="C#":H=17:L=195:GOTO600 780 N$="D^":H=18:L=209:GOTO600 790 N$="E^":H=21:L=31:GOTO600 800 N$="F#^":H=23:L=181:GOTO600 810 N$="G^":H=25:L=30:GOTO600 820 N$="A^":H=28:L=49:GOTO600 830 N$="B^":H=31:L=165:GOTO600 840 N$="C#^":H=35:L=134:GOTO600 850 N$="D^^":H=37:L=162:GOTO600 860 REM******************************** 870 REM 6 WAYS TO PLAY A DIATONIC CHORD, CHOSEN RANDOMLY AT LINE 41 880 NT(B,N)=NT(B,N-1)+2 890 NT(B,N+1)=NT(B,N)+2:GOTO460 900 NT(B,N)=NT(B,N-1)+4 910 NT(B,N+1)=NT(B,N)-2:GOTO460 920 NT(B,N)=NT(B,N-1)+2 930 NT(B,N+1)=NT(B,N)-4:GOTO460 940 NT(B,N)=NT(B,N-1)-2 950 NT(B,N+1)=NT(B,N)+4:GOTO460 960 NT(B,N)=NT(B,N-1)-2 970 NT(B,N+1)=NT(B,N)-2:GOTO460 980 NT(B,N)=NT(B,N-1)-4 990 NT(B,N+1)=NT(B,N)+2:GOTO460 1000 REM******************************** 1010 REM SPECIAL CASES FOR "D" CHORDS 1020 IFN>(S-2)GOTO500 1030 QN=INT(RND(0)*10+1):ONQNGOTO500,500,500,500,500 1040 ONQN-5GOTO500,500,500,1050,1060 1050 NT(B,N+1)=NT(B,N)+2:NT(B,N+2)=NT(B,N)+4:GOTO500 1060 NT(B,N+1)=NT(B,N)+4:NT(B,N+2)=NT(B,N)+2:GOTO500 1070 IFN>(S-2)GOTO500 1080 QQ=INT(RND(0)*10+1):ONQQGOTO500,500,500,500,500 1090 ONQQ-5GOTO500,500,500,1100,1110 1100 NT(B,N+1)=NT(B,N)-4:NT(B,N+2)=NT(B,N)-2:GOTO500 1110 NT(B,N+1)=NT(B,N)-2:NT(B,N+2)=NT(B,N)-4:GOTO500 1120 REM******************************** 1130 REM PRINTER OPTION WITH TIMER LOOP 1140 IFS=6GOTO1160 1150 IFS=8THENPRINT"PRINTOUT THIS FINE REEL?":GOTO1170 1160 PRINT" PRINTOUT THIS LOVELY JIG?" 1170 PRINT"ANSWER 'Y'(YES) OR 'N'(NO), 'Q' QUITS":FORZT=1TO1000 1180 GET P$:IFP$="Y"THEN1220 1190 IF P$="N"THEN1520 1195 IFP$="Q"THEN20 1200 NEXT ZT 1210 GOTO1520 1220 OPEN15,4,15:CLOSE15:IFST<>0THENGOSUB50000:P$="N":GOTO1190 1225 OPEN4,4:PRINT#4,CHR$(14);T$;Z;CHR$(15) 1230 FORB=1TO8 1240 FORN=1TOS 1250 ON NT(B,N) GOTO1360,1370,1380,1390,1400 1260 ON NT(B,N)-5GOTO1410,1420,1430,1440,1450 1270 ON NT(B,N)-10GOTO1460,1470,1480,1490,1500 1280 PRINT#4,N$, 1290 IF N/S=INT(N/S)THENPRINT#4," " 1300 IFN/S=INT(N/S)THEN PRINT#4,"--------------------------------------":GOTO1330 1310 IF2*N/S=INT(2*N/S)THENPRINT#4," " 1320 IF2*N/S=INT(2*N/S)THEN PRINT#4,"......................................." 1330 IFN*B=S*8GOTO1510 1340 NEXTN 1350 NEXTB 1360 N$="D":GOTO1280 1370 N$="E":GOTO1280 1380 N$="F#":GOTO1280 1390 N$="G":GOTO1280 1400 N$="A":GOTO1280 1410 N$="B":GOTO1280 1420 N$="C#":GOTO1280 1430 N$="D^":GOTO1280 1440 N$="E^":GOTO1280 1450 N$="F#^":GOTO1280 1460 N$="G^":GOTO1280 1470 N$="A^":GOTO1280 1480 N$="B^":GOTO1280 1490 N$="C#^":GOTO1280 1500 N$="D^^":GOTO1280 1510 CLOSE4 1520 RETURN 50000 REM NO PRINTER 50010 PRINT"[147]"SPC(10)"PRINTER NOT ON-LINE..." 50020 FORDL=1TO3000:NEXT:RETURN 50030 : 60000 REM QUIT 60010 PRINT"[147] DO YOU REALLY WANT TO QUIT?" 60020 POKE198,0:WAIT198,1:GETA$:IFA$<>"Y"ANDA$<>"N"THEN60010 60030 IFA$="N"THEN20 60040 : 60050 OPEN15,8,15,"R0:HELLO CONNECT=HELLO CONNECT":INPUT#15,ER:CLOSE15 60060 IFER<>63THENEND 60070 LOAD"HELLO CONNECT",8 60080 END